/*
 * Copyright 2011-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0.
 * See `LICENSE` in the project root for license information.
 */

package me.ijleex.mgmt.system.menu.service;

import java.util.List;

import me.ijleex.mgmt.framework.entity.Result;
import me.ijleex.mgmt.system.menu.entity.Menu;

/**
 * 菜单 服务层
 *
 * @author liym
 * @since 2019-03-14 12:28:19 By 'codegen'
 */
public interface IMenuService {

    /**
     * 新增 菜单
     *
     * @param menu 菜单信息
     * @return 结果
     */
    Result insertMenu(Menu menu);

    /**
     * 删除 菜单信息
     *
     * @param ids 需要删除的数据ID，如果有多个，请用逗号（,）分隔
     * @return 结果
     */
    Result deleteMenuByIds(String ids);

    /**
     * 修改 菜单
     *
     * @param menu 菜单信息
     * @return 结果
     */
    Result updateMenu(Menu menu);

    /**
     * 查询 菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单集合
     */
    List<Menu> getMenuList(Menu menu);

    /**
     * 查询 菜单信息
     *
     * @param id 菜单ID
     * @return 菜单信息
     */
    Menu getMenuById(Long id);

    // ===

    /**
     * 根据用户id、项目名称，获取用户菜单
     *
     * <p>用于获取系统右侧菜单</p>
     *
     * @param userId 用户 ID
     * @param systemId 系统标识符（项目名称），如 ijleex-mgmt
     * @return 用户的菜单
     * @since 2019-03-14 16:15
     */
    Result getMenuTreeByUser(Long userId, String systemId);

    /**
     * 根据角色（ID），获取菜单树
     *
     * <p>获取已授权给指定角色的菜单的ID列表（<b>myMenuIds</b>），再递归遍历整个菜单树，
     * 如果 <b>myMenuIds</b> 中包含菜单树中某个节点的 ID，则设置该节点的 checked 的值为 true。</p>
     * <p>用于角色授权时，预先选中角色已有的菜单</p>
     *
     * @param roleId 角色 ID
     * @return 指定角色的菜单
     * @since 2019-03-14 16:17
     */
    Result getMenuTreeByRole(Long roleId);

    /**
     * 得到菜单树
     *
     * <p>用于编辑/预览菜单</p>
     *
     * @param object 菜单信息
     * @return 菜单树状结构
     */
    Result getMenuTree(Menu object);

}
